#ifndef _MAIN_H
#define _MAIN_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/epoll.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <signal.h>
sqlite3 *db;
char *emsg;
void denluinterface()
{
    FILE *fp = fopen("denluinterface", "w+");
    fprintf(fp, "*********************登录界面*********************\n");
    fprintf(fp, "1.注册              2.登录               3.客户注销\n");
    fprintf(fp, "**************************************************\n");
    rewind(fp);
    char str[100];
    while (fgets(str, 100, fp) != NULL)
    {
        printf("%s", str);
    }
    fclose(fp);
}
void staffinterface(char *position, char *name)
{
    FILE *fp = fopen("staffinterface", "w+");
    fprintf(fp, "*******************************************欢迎您%s:%s****************************************\n", position, name);
    if (strcmp(position, "员工") == 0)
    {
        fprintf(fp, "1.私聊   2.群聊   3.打卡   4.员工请假   5.查询工资与钱包余额   6.员工录单  7.员工离职系统  8.退出登录\n");
    }
    if (strcmp(position, "管理员") == 0)
    {
        fprintf(fp, "1.私聊 2.群聊 3.补卡系统 4.批假系统 5.发放员工工资 6.查看员工业绩  7.员工离职系统 8.退出登录\n");
    }
    if (strcmp(position, "客户") == 0)
    {
        fprintf(fp, "1.私聊  2.群聊   3.查看已购买产品与积分   4.积分兑换系统   5.充值系统  6.购买产品  7.退出登录\n");
    }
    fprintf(fp, "********************************************飞翔科技公司******************************************\n");
    rewind(fp);
    char str[100];
    while (fgets(str, 100, fp) != NULL)
    {
        printf("%s", str);
    }
    fclose(fp);
}
void store()
{
    FILE *fp = fopen("store", "w+");
    fprintf(fp, "**************************************飞翔科技***************************************\n");
    fprintf(fp, "--------------------------------1.电脑--3000元--奖励30积分--------------------------\n");
    fprintf(fp, "--------------------------------2.手机--2000元--奖励20积分--------------------------\n");
    fprintf(fp, "--------------------------------3.鼠标--50元--奖励5积分-----------------------------\n");
    fprintf(fp, "--------------------------------4.键盘--40元--奖励5积分------------------------------\n");
    fprintf(fp, "--------------------------------5.充电器--100元--奖励10积分--------------------------\n");
    fprintf(fp, "---------------------------------------0.退出购买-----------------------------------\n");
    fprintf(fp, "***********************************************************************************\n");
    rewind(fp);
    char str[100];
    while (fgets(str, 100, fp) != NULL)
    {
        printf("%s", str);
    }
    fclose(fp);
}
pthread_t pt;
pthread_t pt1;
pthread_t pt2;
pthread_mutex_t t1;
pthread_mutex_t t2;
pthread_mutex_t t3;
pthread_mutex_t t4;
pthread_mutex_t t5;
void chatinterface()
{
    FILE *fp = fopen("chatinterface", "w+");
    fprintf(fp, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    fprintf(fp, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    fprintf(fp, "1.私聊               2.发红包           3.转账            4.发文件           5.收文件\n");
    fprintf(fp, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    fprintf(fp, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    rewind(fp);
    char str[100];
    while (fgets(str, 100, fp) != NULL)
    {
        printf("%s", str);
    }
    fclose(fp);

    pthread_mutex_init(&t1, NULL);
    pthread_mutex_init(&t2, NULL);
    pthread_mutex_init(&t3, NULL);
    pthread_mutex_init(&t4, NULL);
    pthread_mutex_init(&t5, NULL);
}
typedef struct clockIn
{
    char name[50];
    int mouth;
    int day;
    int sign;
} dk;
typedef struct permitleave
{
    char name[128];
    char date[128];
    int stat;
} pml;
typedef struct REGISTER
{
    char name[50];
    int passwd;
    char position[50];
    int fd;
} reg;
struct sockaddr_in getaddr(char *addr, int port)
{
    struct sockaddr_in paddr;
    paddr.sin_addr.s_addr = inet_addr(addr);
    paddr.sin_port = htons(port);
    paddr.sin_family = AF_INET;

    return paddr;
}
typedef struct message
{
    short type;
    char buf[2000];
} msg_node;
// msg：1.注册 2.登录 3.注销 4.打卡 5.请假 6.批假 7.查工资 8.发放员工工资 9.客户充值系统 10.员工录单
//      11.管理员补卡 12.查看员工业绩 13.员工离职 14.审批离职申请 15.购买记录 16.积分兑换 17.私聊
//      18.群聊 19.发文件
typedef struct MONEY
{
    float wage;
    float wallet;
} money;
typedef struct TOPUP
{
    char name[50];
    float jine;
} topup;
typedef struct signbill
{
    char selfname[50];
    char othername[50];
} sb;
typedef struct CustomerWallet
{
    char name[50];
    float balance;
    float jifen;
    int fd;
} cw;
typedef struct mchange
{
    float cbalance;
    float cjifen;
} mcg;
typedef struct purchasehistory
{
    char name[50];
    char changpin[50];
} ph;
typedef struct privatechat
{
    char selfname[50];
    char othername[50];
    char test[128];
} chat;
#define BUF_SIZE 1020
typedef struct Senddocument
{
    char name[50];
    // char filename[50];
    int flag;//记录每次传输量
    char buf[BUF_SIZE];
}sd;
char *_sqlite3_exec(sqlite3 *db, char *sql)
{
    emsg = 0;
    sqlite3_exec(db, sql, 0, 0, &emsg);

    if (emsg != 0)
    {
        if (strcmp("No such file or directory", emsg) == 0)
        {
            return 0;
        }
        if (strcmp("table 客户钱包 already exists", emsg) == 0)
        {
            return 0;
        }
        if (strcmp("table 员工8月工资 already exists", emsg) == 0)
        {
            return 0;
        }
        if (strcmp("table 张三打卡记录 already exists", emsg) == 0)
        {
            return 0;
        }
        if (strcmp("table zhanghao already exists", emsg) != 0)
        {
            printf("执行创建表格出错%s\n", emsg);
            return 0;
        }
    }
    return emsg;
}
void dkbg()
{
    int data = -1;
    data = sqlite3_open("zhanghao.db", &db);
    if (data < 0)
    {
        perror("sqlite3_open");
    }

    char sql5[512];
    sprintf(sql5, "CREATE TABLE 员工8月工资(name varchar(255),performance float,custmers float,salary float,balance float);");
    // sprintf(sql5, "CREATE TABLE 员工8月工资(name varchar(255),salary float,balance float);");
    _sqlite3_exec(db, sql5);

    char sql[512];
    sprintf(sql, "CREATE TABLE 客户钱包(name varchar(255),balance float,jifen float);");
    _sqlite3_exec(db, sql);

    sprintf(sql, "CREATE TABLE 员工请假 (name varchar(255),date varchar(255),stat int);");
    _sqlite3_exec(db, sql);
}

#endif